import { TrustedServers } from '../../Source/Cesium.js';

describe('Core/TrustedServers', function() {

    afterEach(function() {
        TrustedServers.clear();
    });

    it('add without argument throws', function() {
        expect(function() {
            TrustedServers.add();
        }).toThrowDeveloperError();
    });

    it('remove without argument throws', function() {
        expect(function() {
            TrustedServers.remove();
        }).toThrowDeveloperError();
    });

    it('isTrusted without argument throws', function() {
        expect(function() {
            TrustedServers.contains();
        }).toThrowDeveloperError();
    });

    it('http without a port', function() {
        TrustedServers.add('cesiumjs.org', 80);
        expect(TrustedServers.contains('http://cesiumjs.org/index.html')).toBe(true);
        expect(TrustedServers.contains('https://cesiumjs.org/index.html')).toBe(false);
    });

    it('https without a port', function() {
        TrustedServers.add('cesiumjs.org', 443);
        expect(TrustedServers.contains('https://cesiumjs.org/index.html')).toBe(true);
        expect(TrustedServers.contains('http://cesiumjs.org/index.html')).toBe(false);
    });

    it('add', function() {
        expect(TrustedServers.contains('http://cesiumjs.org:81/index.html')).toBe(false);
        TrustedServers.add('cesiumjs.org', 81);
        expect(TrustedServers.contains('http://cesiumjs.org/index.html')).toBe(false);
        expect(TrustedServers.contains('http://cesiumjs.org:81/index.html')).toBe(true);
    });

    it('remove', function() {
        TrustedServers.add('cesiumjs.org', 81);
        expect(TrustedServers.contains('http://cesiumjs.org:81/index.html')).toBe(true);
        TrustedServers.remove('cesiumjs.org', 8080);
        expect(TrustedServers.contains('http://cesiumjs.org:81/index.html')).toBe(true);
        TrustedServers.remove('cesiumjs.org', 81);
        expect(TrustedServers.contains('http://cesiumjs.org:81/index.html')).toBe(false);
    });

    it('handles username/password credentials', function() {
        TrustedServers.add('cesiumjs.org', 81);
        expect(TrustedServers.contains('http://user:pass@cesiumjs.org:81/index.html')).toBe(true);
    });

    it('always returns false for relative paths', function() {
        expect(TrustedServers.contains('./data/index.html')).toBe(false);
    });

    it('handles protocol relative URLs', function() {
        TrustedServers.add('cesiumjs.org', 80);
        expect(TrustedServers.contains('//cesiumjs.org/index.html')).toBe(true);
    });

    it('clear', function() {
        TrustedServers.add('cesiumjs.org', 80);
        expect(TrustedServers.contains('http://cesiumjs.org/index.html')).toBe(true);
        TrustedServers.clear();
        expect(TrustedServers.contains('http://cesiumjs.org/index.html')).toBe(false);
        TrustedServers.add('cesiumjs.org', 80);
        expect(TrustedServers.contains('http://cesiumjs.org/index.html')).toBe(true);
    });
});
